package org.zhixiang.gisQuery.rtree;

/**
 * 
 * @say little Boy, don't be sad.
 * @name Rezar
 * @time 2018年9月21日 下午12:27:30
 * @Desc 些年若许,不负芳华.
 *
 */
public class InRegionWithLine {

	boolean flag = false;
	double px;
	double py;

	public boolean doCheck(LinePoint line) {
		double sx = line.getFirst().x, sy = line.getFirst().y, tx = line.getSecond().x, ty = line.getSecond().y;
		// 点与多边形顶点重合
		if ((sx == px && sy == py) || (tx == px && ty == py)) {
			return true;
		}
		// 判断线段两端点是否在射线两侧
		if ((sy < py && ty >= py) || (sy >= py && ty < py)) {
			// 线段上与射线 Y 坐标相同的点的 X 坐标
			double x = sx + (py - sy) * (tx - sx) / (ty - sy);
			// 点在多边形的边上
			if (x == px) {
				return true;
			}
			// 射线穿过多边形的边界
			if (x > px) {
				flag = !flag;
			}
		}
		return flag;
	}
}
